﻿using System;
using System.Collections.Generic;
using System.Text;
using TMD.GT.AccesoDatos.Core;
using TMD.GT.AccesoDatos.Map;
using TMD.GT.AccesoDatos.Monitoreo;
using TMD.GT.Entidades;
using System.Data.Common;
using System.Data;

namespace TMD.GT.AccesoDatos.Monitoreo.Implementacion
{
    public class CicloRevisionData : DataBase, ICicloRevisionData
    {
        public CicloRevisionData(String connectionString)
            : base(connectionString)
        {
        }

        public List<CicloRevision> ListarCiclosRevision(CicloRevision cicloRevision)
        {
            List<CicloRevision> listaCiclosRevision = new List<CicloRevision>();

            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_CICLOSREVISION_SEL"))
            {
                if (cicloRevision.CODIGO_CICLOREVISION == 0)
                {
                    DB.AddInParameter(command, "@CODIGO", DbType.Int32, DBNull.Value);
                }
                else
                {
                    DB.AddInParameter(command, "@CODIGO", DbType.Int32, cicloRevision.CODIGO_CICLOREVISION);
                }
                DB.AddInParameter(command, "@DESCRIPCION", DbType.String, cicloRevision.DESCRIPCION);
                if (IsValidDate(cicloRevision.FECHA_INICIO))
                {
                    DB.AddInParameter(command, "@FECHA", DbType.Date, cicloRevision.FECHA_INICIO);
                }
                else
                {
                    DB.AddInParameter(command, "@FECHA", DbType.Date, DBNull.Value);
                }
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, cicloRevision.CODIGO_COMPONENTE);

                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaCiclosRevision.Add(Map.CicloRevisionMap.Select(reader));
                    }
                }
            }

            return listaCiclosRevision;
        }

        public CicloRevision crearCicloRevision(CicloRevision cicloRevision)
        {
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_CICLOREVISION_INS"))
            {
                DB.AddInParameter(command, "@DESCRIPCION", DbType.String, cicloRevision.DESCRIPCION);
                DB.AddInParameter(command, "@FECHAI", DbType.Date, cicloRevision.FECHA_INICIO);
                DB.AddInParameter(command, "@FECHAF", DbType.Date, cicloRevision.FECHA_FIN);
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, cicloRevision.CODIGO_COMPONENTE);
                DB.AddOutParameter(command, "@CODIGO", DbType.Int32, 0);

                DB.ExecuteNonQuery(command);

                cicloRevision.CODIGO_CICLOREVISION = Convert.ToInt32(command.Parameters["@CODIGO"].Value);
            }
            return cicloRevision;
        }

        public Boolean actualizaCicloRevision(CicloRevision cicloRevision)
        {
            int retorno = 0;
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_CICLOREVISION_UPD"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.Int32, cicloRevision.CODIGO_CICLOREVISION);
                DB.AddInParameter(command, "@DESCRIPCION", DbType.String, cicloRevision.DESCRIPCION);
                DB.AddInParameter(command, "@FECHAI", DbType.Date, cicloRevision.FECHA_INICIO);
                DB.AddInParameter(command, "@FECHAF", DbType.Date, cicloRevision.FECHA_FIN);
                DB.AddInParameter(command, "@ESTADO", DbType.Boolean, (cicloRevision.ESTADO=="1"));

                retorno = DB.ExecuteNonQuery(command);
            }
            return (retorno > 0);
        }

        public Boolean eliminarCicloRevision(CicloRevision cicloRevision)
        {
            int retorno = 0;
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_CICLOREVISION_DEL"))
            {
                DB.AddInParameter(command, "@CODIGO", DbType.Int32, cicloRevision.CODIGO_CICLOREVISION);
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.Int32, cicloRevision.CODIGO_COMPONENTE);

                retorno = DB.ExecuteNonQuery(command);
            }
            return (retorno > 0);
        }
    }
}
